#include "Process.h"

#include <cstdlib>
#include <unistd.h>
#include <sys/wait.h>

#include <iostream>

Process::Process() {

	children.clear();

}

Process::~Process() {
	this->wait();
}

void Process::execute() {

	int pid = fork();
	if ( pid == 0 ) {
		children.clear();
		int ret = this->run();
		::exit(ret);
	}
	else
		children.push_back(pid);	//TODO! en lugar de esto capturar sigchld o alguna otra señal
}

void Process::wait() {

	while ( !children.empty() ){
		int cret = 0;
		waitpid(children.front(),&cret,0);
		children.pop_front();
	}
}

